問題一、什麼是Capturing group?
Capturing group將pattern區分成子群組,裡面可以是quantifier或disjunciton ("|")
Capturing group會記住subpattern裡面的訊息,後續就可以使用backreference,獲通過匹配結果得到這些訊息。
如果不需要知道subpattern匹配結果,使用non-capturing group,可以提升效能。
Capturing group的使用範例:
const text = "Hello, my email is example@email.com";
const regex = /(\w+)@(\w+\.\w+)/;
//第一個Capturing group為(\w+)
//第二個Capturing group為(\w+\.\w+)
const matchType = text.match(regex); //text內字串符合regex格式
if (matchType) {
const wholeMatch = matchType[0]; // 顯示整個结果:"example@email.com"
const username = matchType[1]; // 第一個Capturing group:"example"
const domain = matchType[2]; // 第二個Capturing group:"email.com"
console.log(`Username: ${username}`); //Username:example
console.log(`Domain: ${domain}`); //Domain:email.com
console.log(matchType); //["Happymail@gmail.com","Happymail","gmail.com"]
}
問題二、正規表達式 (Regular Expression) 的\w 是什麼?
\w 比對數字字母字元(Alphanumerical characters)或底線字母(”_”),
等效於 [A-Za-z0-9_]
\w+ 匹配數字、字母、下底線、加號 。而 + 意思是後面可以多加上英文,或數字或下底線符號,另外大小寫字母混雜也可以匹配。
Reference
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Regular_expressions/Named_capturing_group
https://atedev.wordpress.com/2007/11/23/%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%A4%BA%E5%BC%8F-regular-expression/
https://www.cnblogs.com/show58/p/12363218.html